package main

import (
	"fmt"
	"net"  //做网络socket开发，net包必备!
	"bufio"
	"os"
	"strings"
	_"github.com/garyburd/redigo/redis"
	"time"
)
//客户端连接使用：func Dial(network, address string) (Conn, error)

func main(){

	conn,err := net.Dial("tcp","192.168.137.1:8888")  //连接本地ip的8888端口 【拨号】
	if err != nil{
		fmt.Println("client dial err :",err)
		return
	}
	fmt.Println("Conn 成功：",conn)  //客户端连接服务器所用的端口是随机的!!!

	go acceptcontent(conn)  //开启一个协程专门接收服务器发送过来的消息

	//功能一：客户端可以发送一行内容给服务端
	reader := bufio.NewReader(os.Stdin)  //os.Stdin 代表标准输入【终端输入的内容】
	for {
		//从终端读取一行用户输入，并准备发送欸服务器
		time.Sleep(time.Millisecond * 100)
		fmt.Println("请输入你的内容（exit退出）")
		data,err := reader.ReadString('\n')
		if err != nil{
			fmt.Println("ReadString Error : ",err)
		}
		//拿到data后发给服务器 : Write(b []byte) (n int, err error) 从连接中写入数据
		n,err := conn.Write([]byte(data))  //n代表写了多少个字节
		if err != nil{
			fmt.Println("Write Error : ",err)		
		}
		//data = string(data[:len(data)-2])  //用于删除输入串的后面\n\r等待
		data = strings.Trim(data," \n\r")
		if strings.EqualFold("exit",data){
			fmt.Println("已退出")
			break
		}
		fmt.Printf("--------------------------已发送了%v个字节；\n",n)
	}
	defer conn.Close()
}

func acceptcontent(conn net.Conn){
	for {
		buf := make([]byte,1024)
		n,err := conn.Read(buf)
		fmt.Println("\n"+string(buf[:n]))
		if err != nil{
			fmt.Println("通信结束！")
			return
		}
	}
}